-- 滑动窗口限流Lua脚本
-- 参数说明：
-- KEYS[1]: Redis key
-- ARGV[1]: 限制次数 (limit)
-- ARGV[2]: 时间窗口（秒） (window)
-- ARGV[3]: 当前请求时间戳（毫秒） (now)

local key = KEYS[1] -- Redis key
local limit = tonumber(ARGV[1]) -- 限制次数
local window = tonumber(ARGV[2]) -- 时间窗口
local now = tonumber(ARGV[3]) -- 当前请求时间戳

-- 清理过期的时间戳
local oldest = redis.call('LINDEX', key, -1)
while oldest and (now - tonumber(oldest)) > window do
    redis.call('RPOP', key)
    oldest = redis.call('LINDEX', key, -1)
end

-- 检查当前窗口内的请求数
local current = redis.call('LLEN', key)
if current >= limit then
    return 0  -- 触发限流
end

-- 添加当前请求的时间戳
redis.call('LPUSH', key, now)
return 1  -- 允许通过